/**
 * window.localStorage 本地永久缓存
 * @method set 设置永久缓存
 * @method get 获取永久缓存
 * @method remove 移除永久缓存
 * @method clear 移除全部永久缓存
 */
export interface hasExpire {
  value: any;
  expire?: number;
}
export const Local = {
  // 设置永久缓存
  setItem(key: string, value: any, expire?: number) {
    if (expire) {
      let cache: hasExpire = { value };
      cache.expire = new Date().getTime() + expire;
      window.localStorage.setItem(key, JSON.stringify(cache));
    } else window.localStorage.setItem(key, JSON.stringify(value));
  },
  // 获取永久缓存
  getItem(key: string) {
    let json: any = window.localStorage.getItem(key);
    if (json) {
      const parse_json = JSON.parse(json);
      if (parse_json.expire && parse_json.expire < new Date().getTime()) {
        window.localStorage.removeItem(key);
      } else return JSON.parse(json);
    } else return null;
  },
  // 移除永久缓存
  removeItem(key: string) {
    window.localStorage.removeItem(key);
  },
  // 移除全部永久缓存
  clear() {
    window.localStorage.clear();
  },
};

/**
 * window.sessionStorage 浏览器会话缓存
 * @method set 设置会话缓存
 * @method get 获取会话缓存
 * @method remove 移除会话缓存
 * @method clear 移除全部会话缓存
 */
export const Session = {
  // 设置会话缓存
  setItem(key: string, val: any) {
    window.sessionStorage.setItem(key, JSON.stringify(val));
  },
  // 获取会话缓存
  getItem(key: string) {
    let json: any = window.sessionStorage.getItem(key);
    return JSON.parse(json);
  },
  // 移除会话缓存
  removeItem(key: string) {
    window.sessionStorage.removeItem(key);
  },
  // 移除全部会话缓存
  clear() {
    window.sessionStorage.clear();
  },
};
